package com.wwt.redischarts.cxj.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Repository;

import java.util.Set;

@Repository
@Slf4j
public class Redis {

    @Autowired
    private StringRedisTemplate redisTemplate;

    public Set<String> saveInfoToRedis(String keyWord){
        Long value = redisTemplate.opsForZSet().reverseRank("test:zSet",keyWord);
        log.info("数据存放位置(从0开始)为:{}",value);

        if (value==null){
            /**
             *  redis返回 null 说明没有 value
             *  将数据存放在 redis 的 zSet 数据结构中
             */
            Boolean result = redisTemplate.opsForZSet().add("test:zSet",keyWord,30);
            log.info("存储结果为：{}",result);
        }else {
            /**
             *  redis 中存在 value 值
             */
            Double resultValue = redisTemplate.opsForZSet().incrementScore("test:zSet",keyWord,Double.valueOf(1));
            log.info("当前权重值为：{}",resultValue);
        }

        /**
         *  获取 redis 中存储的数值
         */
        Set<String> sets = redisTemplate.opsForZSet().reverseRangeByScore("test:zSet",0,100);
        log.info("0-100的权重中降序排序集合{}",sets);

        /**
         *  返回前三条数据
         */
        Set<String> redisValue = redisTemplate.opsForZSet().reverseRange("test:zSet",0,2);
        for (String set:redisValue){
            log.info("返回的数据又要：{}",set);
        }

        /**
         *  返回前四条热词的参数值
         */
        Set<ZSetOperations.TypedTuple<String>> redisValues = redisTemplate.opsForZSet().reverseRangeWithScores("test:zSet", 0, 10);
        log.info("返回的集合为:{}",redisValue);
        for (ZSetOperations.TypedTuple<String> set: redisValues) {
            log.info("数据返回的value为:{},权重(score)为:{}", set.getValue(), set.getScore());
        }

        return sets;
    }

}
